package miscelanea;

import java.io.Serializable;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Data extends Date implements Serializable{

	private static final long serialVersionUID = 1L;
	
	/**
	 * Recebe um aString no formato ddmmyyy e instancia uma Data
	 * @param stringData string no formato ddmmyyy
	 * @throws Exception caso a data não seja válida
	 */
	public Data(String stringData) throws Exception{
		super();
		validaData(stringData);
		
	}
	
	@SuppressWarnings("deprecation")
	/**
	 * Verifica se a data passada no formato ddmmyyy é válida. Se for, não retorna nada.
	 * @param stringData data no formato ddmmyyyy
	 * @throws Exception caso a data seja inválida uma exceção será levantada indicando o erro.
	 */
	private void validaData(String stringData) throws Exception {
		SimpleDateFormat formato = new SimpleDateFormat("ddMMyyyy");
		this.setDate((formato.parse(stringData)).getDate());
		this.setMonth(formato.parse(stringData).getMonth());
		this.setYear(formato.parse(stringData).getYear());
		if(!formato.format(this).equals(stringData)){
			throw new Exception("Formato de data inválido!!");
		}
	}

	/**
	 * Retorna a diferença em dias entre a data passada por parâmetro e esta
	 * @param data data POSTERIOR à data atual.
	 * @return data - this
	 */
	public int diferenca(Data data){
		long differenceMilliSeconds = data.getTime() - this.getTime();
		return (int)(differenceMilliSeconds/(1000*60*60*24));

	}
	
	/**
	 * Representação do objeto no formato String
	 */
	@SuppressWarnings("deprecation")
	public String toString(){
		return this.getDate() + "/" + this.getMonth() + "/"+ this.getYear();
	}

	public static void main(String[] args){
		
		try {
			Data data = new Data("28021988");
			Data data2 = new Data("01042012");
			System.out.println(data.diferenca(data2) + "");
			//Data data3 = new Data("30021999"); deve gerar um erro pois a data é inválida
			
		} catch (Exception e) {
			System.out.println(e.getMessage());
		}
	}
}
